
import React from "react";
import type { TableRowSelection } from "antd/lib/table/interface";
import { useLocation } from "react-router-dom";

/** 表格勾选 */
export function useRowSelection<IDataSource>(rowKey: string) {

    const location = useLocation();
    const [selectedRows, setSelectedRows] = React.useState<IDataSource[]>([]);

    /** 选择的数据主键 */
    const selectedRowKeys = React.useMemo(() => selectedRows.map(e => e[rowKey]), [selectedRows, rowKey])

    /** 设置选择的数据 */
    const setSelectedRow = React.useCallback((selectedRows: IDataSource[]) => {
        setSelectedRows(selectedRows);
    }, [])

    /** 表格勾选事件 */
    const onChange = React.useCallback((_: any, selectedRows: IDataSource[]) => {
        setSelectedRow(selectedRows)
    }, [setSelectedRow]);

    /** 表格勾选参数 */
    const rowSelection = React.useMemo<TableRowSelection<IDataSource>>(() => {
        return {
            fixed: true,
            columnWidth: 50,
            selectedRowKeys,
            onChange,
        }
    }, [onChange, selectedRowKeys])

    /** 路由变化去掉选中的 */
    React.useEffect(() => {
        setSelectedRow([])
    }, [location.pathname, location.search, setSelectedRow])

    return {
        /** 选择的数据 */
        selectedRows,

        /** 选择的数据主键 */
        selectedRowKeys,

        /** 设置选择的数据 */
        setSelectedRow,

        /** 表格勾选参数 */
        rowSelection,

        /** 选择的数据主键 */
        rowKey,
    }
}